package co.com.ebusiness.trader.seguridad.dao.hibernate;

import java.util.List;

import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import co.com.ebusiness.trader.seguridad.dao.UserDao;
import co.com.ebusiness.trader.seguridad.model.Usuario;
import co.com.ebusiness.trader.seguridad.model.UsuarioEmpresa;

public class UserDaoImpl implements UserDao {

	@Inject
	private Session session;
	
	
	/**
      * {@inheritDoc}
     */
    public boolean checkLogin(String login, String password) {
            if (null == login || null == password) {
                    throw new IllegalArgumentException("Login and password are mandatory. Null values are forbidden.");
            }               
            try {
            	 	
            		// create a new criteria
                    Criteria crit = session.createCriteria(Usuario.class);
                    crit.add(Restrictions.ilike("loginUser", login));
                    crit.add(Restrictions.eq("passwordUser", password));
                    
                    Usuario user = (Usuario)crit.uniqueResult();
                    return (user != null);
            }
            catch(Exception e) {
                    // Critical errors : database unreachable, etc.
                    e.printStackTrace();
                    return false;
            }
    }
    
    /**
      * {@inheritDoc}
     */
    public Usuario getUser(String login) {
            if (null == login) {
                    throw new IllegalArgumentException("Login is mandatory. Null value is forbidden.");
            }
            try {
                    // create a new criteria
                    Criteria crit = session.createCriteria(Usuario.class);
                    crit.add(Restrictions.eq("loginUser", login));
                    
                    Usuario user = (Usuario)crit.uniqueResult();
                    return user;
            }
            catch(Exception e) {
                    // Critical errors : database unreachable, etc.
                    e.printStackTrace();
                    
                    return null;
            }
    }
    
    
    public UsuarioEmpresa getEmpresa(int id){

    	try {
    		// create a new criteria
    		Criteria crit = session.createCriteria(UsuarioEmpresa.class);
    		crit.add(Restrictions.eq("id", id));

    		UsuarioEmpresa empresa = (UsuarioEmpresa)crit.uniqueResult();
    		return empresa;
    	}
    	catch(Exception e) {
    		// Critical errors : database unreachable, etc.
    		e.printStackTrace();

    		return null;
    	}
    }
    
    public List<UsuarioEmpresa> getEmpresas(Usuario usuario){
    	if (null == usuario) {
    		throw new IllegalArgumentException("Usuario is mandatory. Null value is forbidden.");
    	}
    	try {
    		// create a new criteria
    		Criteria crit = session.createCriteria(UsuarioEmpresa.class);
    		crit.add(Restrictions.eq("usuario", usuario));

    		
    		return crit.list();
    	}
    	catch(Exception e) {
    		// Critical errors : database unreachable, etc.
    		e.printStackTrace();

    		return null;
    	}
    }
}